Solid-state disks or drives (SSDs) are frequently used for caching inside a data storage subsystem. Generally the user need not worry about caching algorithms as caching can be managed at the driver level or at the storage/host bus adaptor (HBA) controller level, transparently from the user. Due to the cost of SSD NAND flash memory, consumer multi-level cell (cMLC) or equivalent low-cost, low-endurance NAND options may be adopted for the sake of market competitiveness. If the cMLC SSD is used directly, this is not a problem; the user assumes responsibility for ensuring the SSD will last for the desired period (ex.—lifespan). However, if the cMLC SSD is used transparently for caching inside a storage subsystem, the subsystem then bears responsibility for ensuring a desired lifespan of the SSD, and also that the user will not encounter any major or erratic drop in performance. In addition, the subsystem vendor will not have any control or discretion as to incoming I/O after the point of sale.
As a result, standalone SSD manufacturers may implement a feature known as “life curve throttling”. In order to guarantee SSD lifespan, the power-on hours and remaining life of a single SSD are measured, with heavy throttling implemented if the SSD is used faster than allowed. When the SSD is used as a caching device, however, such heavy throttling can severely impair performance. The cache serves as a layer in front of primary storage, and therefore cache performance that is too slow can have a cascading effect on the performance of the entire storage subsystem. Therefore inbuilt SSD throttling is not a viable option for guaranteeing a fixed lifespan (e.g., 3 years) to consumers. If, for example, a heavily throttled or “slow” SSD is used to cache hard disk (HDD) data, any “hot” I/O must deal with two “slow” devices: the HDD and the SSD. It may therefore be desirable to manage SSD endurance (to guarantee a fixed lifespan) without the performance impairments associated with heavy throttling.